﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Itegracion.Framework.Tool
{
    public class TextReporter
    {
        public static string Process(string template, params object[] args)
        {
            string fixed_template = template;
            string rpta = string.Empty;
            int parametro = -1;
            int lineas = 0;
            string subtemplate = string.Empty;
            string subrpta = string.Empty;

            Regex regex = new Regex(@"{(\d+), *(\d+):({[{} \w- ,:]+})}", RegexOptions.Multiline);
            Match match = regex.Match(template);
            if (match.Success)
            {
                parametro = Convert.ToInt32(match.Groups[1].Value);
                lineas = Convert.ToInt32(match.Groups[2].Value);
                subtemplate = match.Groups[3].Value;
                object[] subargs;
                object[] subargsrpta;
                Decimal tmp;
                List<string> items = args[parametro] as List<string>;
                foreach (string item in items)
                {
                    subargs = item.Split('|');
                    subargsrpta = new object[subargs.Length];
                    for (int i = 0; i < subargs.Length; i++)
                    {
                        if (Decimal.TryParse(subargs[i] + "", out tmp))
                            subargsrpta[i] = tmp;
                        else
                            subargsrpta[i] = subargs[i];
                    }
                    subrpta += string.Format(subtemplate + "\n", subargsrpta);
                }
                for (int i = items.Count; i < lineas - 1; i++)
                {
                    subrpta += "\n";
                }
                fixed_template = regex.Replace(template, subrpta);
            }
            rpta += string.Format(fixed_template, args);
            return rpta;
        }
    }
}
